#include <bits/stdc++.h>
using namespace std;
// Yangguji y00430385对所有人说说： 04:47 PM
// 对一行给定的字符串进行反转输出，同时去除中间不满足条件的分隔符
// 输入字符串：I am an 20-years out--standing @ * -stu- dent
// 去除分割符并反转之后，输出字符串（子字符串以一个空格隔开）：dent stu standing out 20-years an am I

// 分割符描述如下：
// 1、除了字母、数字和 - 之外，其他的都是分割符，如输入字符串中的@ *等都属于分割符
// 2、20-years中的'-' 表示的是连接符，即当‘-’两边都有字母、数字时，‘-’就属于连接符，否则属于分割符
// 3、out--standing中的‘--’表示分割符，应该拆分为两个字字符串out 和 standing

// bool isalnum(char c)
// {
//     if((c<='9'&&c>='0')||(c>='A'&&c<='Z')||(c>='a'&&c<='z'))
//     return true;
//     return false;
// }
int main()
{
vector<string> v;   
string  s="I am an 20-years out--standing @ * -stu- dent";
//string  s="I am an 20-years out dent";
string tmp="";
for(int i=0;i<s.size();++i)
{
    if(s[i]=='-'||isalnum(s[i]))
    {
        if(s[i]=='-'&&((!isalnum(s[i+1]))||(!isalnum(s[i-1]))))
        {
            v.push_back(tmp);

            tmp="";
        }
        else
        tmp+=s[i];
        if(i==s.size()-1)v.push_back(tmp);
    }
    else
    { if(!tmp.empty())
        v.push_back(tmp);
        tmp="";
    }

}
reverse(v.begin(),v.end());
cout<<endl;
for(auto x:v)
{
    cout<<x<<" ";
}
cout<<endl;

   return 0;
}
